//SkyDomeFX.h
//Created 10/07/13
//Cretaed By Daniel Bowler
//
//Effect used to draw a sky dome. 

#pragma once

#include "AbstractFX.h"

class SkyDomeFX : public AbstractFX
{
	//The shader Manager will be responsable for creating the shaders. 
	friend ShaderManager;
public:
	//Vertex structure for this effect.
	struct Position
	{
		XMFLOAT3 Pos;
	};

	//The setter method for the WorldViewProj matrix
	void SetCbufferPerObjectData(CXMMATRIX worldViewProjectionMatrix);
	//Sets cube map
	void SetCubeMap(ID3D11ShaderResourceView* cubeMap);

private:
	//We dont want the user to directly create one of these (They work with
	//pointers), so hide the constructor/destructors. 
	SkyDomeFX(ID3D11Device* device);
	~SkyDomeFX();
	//Disable the copy constructor and the = operator
	SkyDomeFX(const SkyDomeFX& other);
	SkyDomeFX& operator = (const SkyDomeFX& other);

private:
	//variable pointers. 
	//WorldViewProj Matrix
	ID3DX11EffectMatrixVariable* worldViewProj;
	//SRV to our cube map
	ID3DX11EffectShaderResourceVariable* cubeMapVar;

private:
	//Override these to aid creating our shader.
	void InitInputLayout(ID3D11Device* device);
	void InitShaderVariablePointers();
};